/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.brain.core.view.mbean;

import com.brain.conf.dto.MonedaDto;
import com.brain.core.configuracion.WebServletContextListener;
import com.brain.core.dto.ArchivoDto;
import com.brain.core.dto.EmpresaDto;
import com.brain.core.dto.UbigeoDto;

import com.brain.core.exception.DAOException;
import com.brain.core.manager.ArchivoManager;
import com.brain.core.manager.BitacoraManager;
import com.brain.core.manager.EmpresaManager;
import com.brain.core.manager.EmpresaMonedaManager;
import com.brain.core.manager.EmpresaOpcionSistemaManager;
import com.brain.core.manager.RecursosManager;
import com.brain.core.manager.UbigeoManager;
import com.brain.segu.dto.OpcionSistemaDto;
import com.brain.core.manager.EmpresaUbigeoManager;
import com.brain.segu.mbean.OpcionSistemaMBean;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.Resource;
import org.apache.log4j.Logger;
import org.primefaces.event.FileUploadEvent;
import org.primefaces.model.DefaultTreeNode;
import org.primefaces.model.TreeNode;
import org.primefaces.model.UploadedFile;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;

/**
 *
 * @author Indra
 */
@Controller("empresaMBean")
@Scope("session")
public class EmpresaMBean extends GenericMBean implements Serializable {

    private static Logger logger = Logger.getLogger(EmpresaMBean.class);
    @Resource
    private EmpresaManager manager;
    @Resource
    private BitacoraManager bitacoraManager;
    @Resource
    private ArchivoMBean archivoMBean;
    @Resource
    private ArchivoManager archivoManager;
    @Resource
    private RecursosManager recursosManager;
    @Resource
    private UbigeoManager ubigeoManager;
    @Resource
    private EmpresaUbigeoManager empresaUbigeoManager;
    @Resource
    private EmpresaOpcionSistemaManager empresaOpcionSistemaManager;
    @Resource
    private EmpresaMonedaManager empresaMonedaManager;
    @Autowired
    private ApplicationMBean applicationMBean;
    @Autowired
    private SessionMBean sessionMBean;
    private List<EmpresaDto> lista;
    private List<UbigeoDto> listaUbigeo;
    private EmpresaDto dto;
    private EmpresaDto dtoFiltro;
    private String keyEntidad = "key.entidad.empresa";
    private List<UbigeoDto> listaPaises;
    private List<MonedaDto> listaMonedas;
    private TreeNode ubigeos;
    private TreeNode selectedUbigeo;
    private TreeNode selectedopcionSistema;
    private MonedaDto selectedMonedaDto;
    private boolean accesoListaEmpresas = true;

    public EmpresaMBean() {
        this.dtoFiltro = new EmpresaDto();
    }

    public String iniciar() {
        this.lista = null;
        this.dto = null;
        this.dtoFiltro = new EmpresaDto();
        this.dtoFiltro.setDescripcion("");
        this.dtoFiltro.setEstado(Boolean.TRUE);
        return manager.getUrlLista();
    }

    public String nuevo() {
        sessionMBean.setAccion(applicationMBean.getNuevo());
        sessionMBean.setTitulo(recursosManager.construirTitulo(keyEntidad, sessionMBean.getAccion()));

        this.dto = manager.inicializar();
        return manager.getUrl();
    }

    public String editar() {
        sessionMBean.setAccion(applicationMBean.getEditar());
        sessionMBean.setTitulo(recursosManager.construirTitulo(keyEntidad, sessionMBean.getAccion()));
        try {
            this.dto = manager.obtenerPorId(this.dto.getId());
            this.dto.setComentario("");
        } catch (DAOException ex) {
            logger.error(ex);
        }
        return manager.getUrl();
    }

    public String ver() {
        sessionMBean.setAccion(applicationMBean.getVer());
        sessionMBean.setTitulo(recursosManager.construirTitulo(keyEntidad, sessionMBean.getAccion()));
        try {
            this.dto = manager.obtenerPorId(this.dto.getId());
        } catch (DAOException ex) {
            logger.error(ex);
        }
        return manager.getUrl();
    }

    public void buscar() {
        try {
            this.lista = this.manager.obtener(this.dtoFiltro);
        } catch (DAOException ex) {
            showError("ERROR_SISTEMA", ex.getMessage());
        }
    }

    public String guardar() {
        manager.guardar(this.dto);
        return null;
    }

    public String verBitacora() {

        bitacoraManager.cargarBitacoraEntidad(manager.getIdEntidad(), this.dto.getId());
        return null;
    }

    public void verArchivo() {
        archivoManager.viewArchivoHtml(this.dto.getArchivoLogoDto().getNombre());
    }

    public void listenerFile(FileUploadEvent event) {

        UploadedFile file = event.getFile();

        ArchivoDto archivoDto = new ArchivoDto();
        archivoDto.setEsAtributo(Boolean.TRUE);
        archivoDto.setNombre(file.getFileName());
        archivoDto.setTipoDto(null);
        archivoDto.setPeso(BigDecimal.valueOf(file.getSize()));
        archivoDto.setComentario("LOGO DE EMPRESA");
        archivoDto.setBites(file.getContents());
        archivoDto.setDetalle(archivoDto.getNombre());
        archivoDto.setEstado(Boolean.TRUE);
        if (archivoDto.getNombre().indexOf(".") != -1) {
            archivoDto.setExtension(archivoDto.getNombre().substring(archivoDto.getNombre().lastIndexOf(".") + 1, archivoDto.getNombre().length()));
        }

        this.dto.setArchivoLogoDto(archivoDto);


    }

    public String verArchivos() {
        sessionMBean.setEntidad(manager.getIdEntidad());
        sessionMBean.setRegistro(this.dto.getId());
        archivoMBean.cargarArchivos();

        return null;
    }

    public void cargarListaUbigeoMaestro() {
        UbigeoMBean ubigeoMBean = (UbigeoMBean) WebServletContextListener.getApplicationContext().getBean("ubigeoMBean");
        ApplicationMBean applicationMBean = (ApplicationMBean) WebServletContextListener.getApplicationContext().getBean("applicationMBean");
        ubigeoMBean.iniciarUbigeoEmpresa(this.dto);
        selectedUbigeo = new DefaultTreeNode();
    }

    public void cargarListaOpcionSistemaMaestro() {
        OpcionSistemaMBean opcionSistemaMBean = (OpcionSistemaMBean) WebServletContextListener.getApplicationContext().getBean("opcionSistemaMBean");
        ApplicationMBean applicationMBean = (ApplicationMBean) WebServletContextListener.getApplicationContext().getBean("applicationMBean");
        opcionSistemaMBean.iniciarOpcionSistemaDesdeEmpresa(this.dto);
    }

    public void cargarListaMonedasMaestro() {
        listaMonedas = new ArrayList<MonedaDto>();
        listaMonedas = manager.cargarListaMonedasMaestro(this.dto);
    }

    public void agegarEliminarUbigeoPais() {
        UbigeoDto ubgDtoAux = new UbigeoDto();
        ubgDtoAux = (UbigeoDto) selectedUbigeo.getData();
        try {
            this.empresaUbigeoManager.agregarEliminarEmpresaUbigeo(ubgDtoAux, this.dto);
            this.cargarListaUbigeoMaestro();
        } catch (DAOException ex) {
            showError("ERROR_SISTEMA", ex.getMessage());
        }
    }

    public void agegarEliminarOpcionesSistema() {
        OpcionSistemaDto opcSisteDto = new OpcionSistemaDto();
        opcSisteDto = (OpcionSistemaDto) selectedopcionSistema.getData();
        try {
            this.empresaOpcionSistemaManager.agregarEliminarOpcionSistemaEmpresa(opcSisteDto, this.dto);
            this.cargarListaOpcionSistemaMaestro();
        } catch (DAOException ex) {
            showError("ERROR_SISTEMA", ex.getMessage());
        }
    }

    public void agegarEliminarEmpresaMoneda() {
        try {
            this.empresaMonedaManager.agregarEliminarEmpresaMoneda(this.selectedMonedaDto, this.dto);
            this.cargarListaMonedasMaestro();
        } catch (DAOException ex) {
            showError("ERROR_SISTEMA", ex.getMessage());
        }
    }

    public String retroceder() {
        buscar();
        return manager.getUrlLista();
    }

    public static Logger getLogger() {
        return logger;
    }

    public static void setLogger(Logger logger) {
        EmpresaMBean.logger = logger;
    }

    public EmpresaManager getManager() {
        return manager;
    }

    public void setManager(EmpresaManager manager) {
        this.manager = manager;
    }

    public BitacoraManager getBitacoraManager() {
        return bitacoraManager;
    }

    public void setBitacoraManager(BitacoraManager bitacoraManager) {
        this.bitacoraManager = bitacoraManager;
    }

    public RecursosManager getRecursosManager() {
        return recursosManager;
    }

    public void setRecursosManager(RecursosManager recursosManager) {
        this.recursosManager = recursosManager;
    }

    public ApplicationMBean getApplicationMBean() {
        return applicationMBean;
    }

    public void setApplicationMBean(ApplicationMBean applicationMBean) {
        this.applicationMBean = applicationMBean;
    }

    public SessionMBean getSessionMBean() {
        return sessionMBean;
    }

    public void setSessionMBean(SessionMBean sessionMBean) {
        this.sessionMBean = sessionMBean;
    }

    public List<EmpresaDto> getLista() {
        return lista;
    }

    public void setLista(List<EmpresaDto> lista) {
        this.lista = lista;
    }

    public EmpresaDto getDto() {
        return dto;
    }

    public void setDto(EmpresaDto dto) {
        this.dto = dto;
    }

    public EmpresaDto getDtoFiltro() {
        return dtoFiltro;
    }

    public void setDtoFiltro(EmpresaDto dtoFiltro) {
        this.dtoFiltro = dtoFiltro;
    }

    public String getKeyEntidad() {
        return keyEntidad;
    }

    public void setKeyEntidad(String keyEntidad) {
        this.keyEntidad = keyEntidad;
    }

    public List<UbigeoDto> getListaPaises() {
        UbigeoManager m = (UbigeoManager) WebServletContextListener.getApplicationContext().getBean("ubigeoManager");
        try {
            return m.obtenerPaisesActivos();
        } catch (DAOException ex) {
            logger.error(ex);
            return new ArrayList<UbigeoDto>();
        }
    }

    public void setListaPaises(List<UbigeoDto> listaPaises) {
        this.listaPaises = listaPaises;
    }

    public List<UbigeoDto> getListaUbigeo() {
        return listaUbigeo;
    }

    public void setListaUbigeo(List<UbigeoDto> listaUbigeo) {
        this.listaUbigeo = listaUbigeo;
    }

    public TreeNode getUbigeos() {
        return ubigeos;
    }

    public void setUbigeos(TreeNode ubigeos) {
        this.ubigeos = ubigeos;
    }

    public TreeNode getSelectedUbigeo() {
        return selectedUbigeo;
    }

    public void setSelectedUbigeo(TreeNode selectedUbigeo) {
        this.selectedUbigeo = selectedUbigeo;
    }

    public TreeNode getSelectedopcionSistema() {
        return selectedopcionSistema;
    }

    public void setSelectedopcionSistema(TreeNode selectedopcionSistema) {
        this.selectedopcionSistema = selectedopcionSistema;
    }

    public MonedaDto getSelectedMonedaDto() {
        return selectedMonedaDto;
    }

    public void setSelectedMonedaDto(MonedaDto selectedMonedaDto) {
        this.selectedMonedaDto = selectedMonedaDto;
    }

    public List<MonedaDto> getListaMonedas() {
        return listaMonedas;
    }

    public void setListaMonedas(List<MonedaDto> listaMonedas) {
        this.listaMonedas = listaMonedas;
    }

    public boolean isAccesoListaEmpresas() {
        if (!sessionMBean.getSessionUsuarioDto().getRolDto().getId().equals(sessionMBean.getRolSystem())) {
            accesoListaEmpresas = false;
        }
        return accesoListaEmpresas;
    }

    public void setAccesoListaEmpresas(boolean accesoListaEmpresas) {
        this.accesoListaEmpresas = accesoListaEmpresas;
    }
}
